const fp = require("lodash/fp")

const car = [
    {
        name:"Ferrari FF",
        horsepower:660,
        dollar_value:700000,
        in_stock:true
    },
    {
        name:"Spyker C12 Zagato",
        horsepower:650,
        dollar_value:648000,
        in_stock:false
    },
    {
        name:"Jaguar XKR-S",
        horsepower:550,
        dollar_value:132000,
        in_stock:false
    },
    {
        name:"Audi R8",
        horsepower:525,
        dollar_value:114200,
        in_stock:false
    },
    {
        name:"Aston Martin One-77",
        horsepower:750,
        dollar_value:1850000,
        in_stock:true
    },
    {
        name:"Pagani Huayra",
        horsepower:700,
        dollar_value:1300000,
        in_stock:false
    },
]

//练习1
// let isLastInStock = function(cars){
//     let last_car = fp.last(cars)
//     return fp.prop("in_stock",last_car)
// }
//管道从右到左，先执行fp.last(cars)，再执行fp.prop("in_stock",last_car)
//获取最后一个car的in_stock
let isLastInStock = fp.flowRight(last_car => fp.prop("in_stock",last_car) ,fp.last)
console.log(1,isLastInStock(car))
//练习2
//使用fp.flowRight()、fp.prop()和fp.first()获取第一个car的name
//从右到左，先获取第一个car的对象，在获取该对象的name属性
let isFirstName = fp.flowRight(last_car => fp.prop("name",last_car) ,fp.first)
console.log(2,isFirstName(car))

//练习3
//使用帮助函数_average重构averageDollarValue，使用函数组合的方式实现
let _average = function(xs){
    return fp.reduce(fp.add,0,xs)/xs.length
}
// let averageDollarValue = function(cars){
//     let dollar_values = fp.map(function(car){
//         return car.dollar_value
//     },cars)
//     return _average(dollar_values)
// }
//从右到左生成组合函数，car传入时，先会自动作为fp.map()的第二个参数即fp.map(fn,car)
//也可以写成fp.flowRight(dollar_values => _average(dollar_values),cars => fp.map(car => car.dollar_value,cars))
//但没必要
let averageDollarValue = fp.flowRight(_average,fp.map(car => car.dollar_value))
console.log(3, averageDollarValue(car))

//练习4
//使用flowRight写一个sanitizeNames()函数，返回一个下划线连接的小写字符串，把数组中的name转换为这种形式：例如：
//sanitizeNames(["Hello World"])=>["hello_world"]
let _underscore = fp.replace(/\W+/g,"_")
let sanitizeNames = fp.flowRight(fp.map(name => _underscore(name)),fp.map(name => fp.toLower(name)))
console.log(4,sanitizeNames(["Ferrari FF","Aston Martin One-77"]))

